package com.cskaoyan.java._1handle._0default;

/**
 * 在Java中，一个异常如果持续向上层抛出
 * 直到抛给JVM，JVM必须进行异常处理。
 * 这种异常处理的方式，我们称之为“Java默认的异常处理机制”。
 *
 *
 * 异常的默认处理机制/场景:
 *      1.如果异常产生在main方法中，那么：
 *          当我们的代码执行到错误行数之前，代码是正常执行的。
 *          当我们的代码执行到错误行数时，JVM会将异常信息封装成一个异常对象，然后在该行抛出这个异常对象。
 *          因为没有做任何异常处理，该异常对象会直接向上抛给JVM，JVM会做以下操作：
 *      立刻终止程序执行，所以产生异常之后的语句，都不执行了。
 *      将异常信息，异常产生的行数等打印到控制台上，告诉程序员发生了什么问题。
 *      所以在默认的异常处理机制下, 一个Java程序要么就产生一个异常(然后程序终止),要么就没有异常
 *      绝不可能产生两个异常
 *
 *
 * 如果异常产生在main方法当中调用的另一个方法中，那么：
 *      当我们的代码执行到错误行数之前，代码是正常执行的。
 * 当我们的代码执行到错误行数时，JVM会将异常信息封装成一个异常对象，然后在该行抛出这个异常对象。
 * 因为没有做任何异常处理，该异常对象会持续的向上层抛出，直到JVM拿到这个对象，JVM会做以下操作：
 * 立刻终止程序执行，所以产生异常之后的语句，都不执行了。
 * 将异常信息，异常产生的行数等打印到控制台上，告诉程序员发生了什么问题。
 *
 * 总结，如果程序中抛出一个运行时异常，而我们没有做任何手动处理该异常，那么最终就会导致该异常对象抛给JVM做默认处理。默认处理的方式是：
 * 终止程序执行，从错误行开始，后面都无法继续执行。
 * 在控制台打印异常相关的信息。
 *
 *
 * 注意:
 *      默认的异常处理机制仅针对运行时异常,因为编译时异常会强制程序员手动处理(它的处理没有默认机制,必须手动处理)
 *      也就是说,运行时异常,在不做任何特殊处理的情况下,会一直向上抛出,直到抛给main方法,抛给JVM
 *      然后做默认处理.
 *
 * @since 15:01
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println("66666666");
        // System.out.println(10 / 0);
        System.out.println("777777777");
        int[] arr = null;
        System.out.println(arr);
        // System.out.println(arr.length);
        test();
    }

    private static void test() {
        int[] arr = new int[0];
        System.out.println("8888888");
        System.out.println(arr[0]);
        System.out.println("9999999");
    }
}
